import { UploadProps } from 'element-plus'

export default (
  trademarkParams,
  reqUpdateTredemark,
  reqAddTredemark,
  getHasTredemark,
  fromRef,
  dialogFromVisible
) => {
  // 对话框品牌管理的校验方法
  const vaildatorTmName = (rule, value, cb) => {
    /* rule 规则本身的对象value 我们写的文字,是一个数组trim()方法过滤数组中的空格*/
    if (value.trim().length >= 2) {
      cb()
    } else {
      cb(new Error('品牌名称字数少于2'))
    }
  }
  const vaildatorLogoUrl = (rule, value, cb) => {
    /* 在此处,我们的value是我们图片的地址 可以利用其值,if是否拥有来判断是否存在图片*/
    value ? cb() : cb(new Error('没有LOGO图片'))
  }
  /* 表单校验规则
  require:这个字段会被校验,变单项前出现五角星
  trigger:代表触发检验规则的实际[blur,change]
*/
  const rules = {
    tmName: [{ required: true, trigger: 'blur', validator: vaildatorTmName }],
    logoUrl: [{ required: true, validator: vaildatorLogoUrl }]
  }

  /* 文件上传成功时的钩子 */
  const handleAvatarSuccess: UploadProps['onSuccess'] = (response, uploadFile) => {
    /* respons:是我们当前上传图片post请求服务器返回的数据...
      uploadFile:是我们图片当前的信息,也包括了请求服务器返回的数据...
   */
    console.log(response)
    trademarkParams.value.logoUrl = response.data
    /* 优化/解决bug,在检验失败后,添加图片,无法再次触发表单检验导致的,错误信息还存在,不美观,我们在其文件上传成功的时候,我们将其错误收回 */
  }
  /* 上传文件之前的钩子
  参数为上传的文件， 若返回false或者返回 Promise 且被 reject，则停止上传。
  rawFile的type是我们文件的格式
  size是我们的字节大小
   */
  const beforeAvatarUpload: UploadProps['beforeUpload'] = (rawFile) => {
    /* 我们的格式必须是jpeg/png/gif的,否则就弹错误.... */
    if (
      rawFile.type !== 'image/jpeg' &&
      rawFile.type !== 'image/gif' &&
      rawFile.type !== 'image/png'
    ) {
      ElMessage.error('格式必须是jpg/png/gif!')
      return false
      /* 如果我们的大小超过4MB弹出信息框,报错,错误信息  再给我们的钩子返回false,取消上传*/
    } else if (rawFile.size / 1024 / 1024 > 4) {
      ElMessage.error('大于 4MB!')
      return false
    }
    return true
  }
  // 确定按钮
  const confirm = async (response) => {
    /* 在我们提交之前我们利用await等待表单验证给予我们正确的结果.validate()方法会放回一个Promise对象,检验失败会返回false */
    try {
      await fromRef.value.validate()
      const result = trademarkParams.value.id
        ? await reqUpdateTredemark(trademarkParams.value)
        : await reqAddTredemark(trademarkParams.value)
      if (result.code == 200) {
        dialogFromVisible.value = false
        ElMessage({
          type: 'success',
          message: trademarkParams.value.id ? '修改品牌成功' : '添加品牌成功'
        })
        /* 重新获取添加后的全部数据 */
        getHasTredemark()
        return 'OK'
      } else {
        ElMessage.error(trademarkParams.value.id ? '修改失败' : '添加失败')
        dialogFromVisible.value = false
        return Promise.reject(new Error(result.message))
      }
    } catch (error) {
      console.error('发生错误：', error.message)
    }
  }
  // 取消按钮并且清空数据...以方便下次上传
  const cancel = () => {
    dialogFromVisible.value = false
    /*  优化/解决bug,在我们点击确定后,我们的表单检验依旧存在.导致的检验错误,明明写好了但是还是会有错误 */
  }

  return {
    vaildatorTmName,
    vaildatorLogoUrl,
    rules,
    handleAvatarSuccess,
    beforeAvatarUpload,
    confirm,
    cancel
  }
}
